export function params(){
    const BITS = (...ar) => {
      let r = ar.reverse()
      return (v) => r.map(i => {
        let t = v & (0x0FFFF >> (16 - i));
        v >>= i;
        return t
      }).reverse()
    }
    const F01=(v,n)=>{
        let U = (v/2**11)*3.9
        return U
    }
    const F02=(v,n)=>{
        let k = PA_D[n]['k']
        let b = PA_D[n]['b']
        let T = k*v + b
        return T
    }
    const F03=(v,n)=>{
        let T = 4100/(13.7515-Math.log(0.4778*(4095-v)/v)) - 273.15
        return T
    }
    const F04=(v,n)=>{
        let T = 2100/(7.043-Math.log((4095-v)/(2*v))) - 310.15
        return T
    }
    const PA_D = {
        'a009': {'k': 0.08135, 'b': -206.3995},
        'a010': {'k': 0.08074, 'b': -207.2827},
    }
    const D01={
      0:'探头A关',
      1:'探头A开'
    }
    const D02={
      0:'探头B关',
      1:'探头B开'
    }
    const D03={
      0b0: '探头A地面模式',
      0b1: '探头A科学模式（2048nT量程）'
    }
    const D04={
      0b0: '探头B地面模式',
      0b1: '探头B科学模式（2048nT量程）'
    }
    const D05={
      0b00: '1Hz采样率',
      0b01: '10Hz采样率',
      0b10: '128Hz采样率'
    }
    const D06={
      0b0: '主份FPGA上电',
      0b1: '备份FPGA上电'
    }
    const D07={
      0b0: '主份3.3V上电',
      0b1: '备份3.3V上电'
    }
    const D08={
      0b0: '模拟电路正常连接探头',
      0b1: '模拟电路交叉连接探头'
    }
    const D09={
      0b0: '数据未压缩',
      0b1: '数据压缩'
    }
        const TD01=(v)=>{
      // d: 时区为北京时的时候， 转换最终时间 需要减去offset 方可用 toISO 方法显示为北京时 - t.getTimezoneOffset()*60e3
      // 	  // d 指定时区为utc / toiso 也是utc 也就是与开始时间处于同一时区，处理过程就不需要在考虑时区问题了
       	        let d = new Date('2020-01-01T00:00:00Z')
       	        let t = parseInt(v.toString(16).padStart(12,0).slice(0,8),16)*1000 + (v & 0xFFFF)  + d.getTime()
       	        return new Date(t).toISOString().slice(0,23).replace('T',' ')
       	                        }
    return [
//        1			包同步码		16			0xEB90
        new Params('a001', '包同步码', 16, null, null, null,null),
//        2			包标识		16			0x094F	/	/	/	/
        new Params('a002', '包标识', 16, null, null, null,null),
//        3			包序		16
        new Params('a003', '包序', 16, null, null, null,null),
//        4			包长		16			0x17
        new Params('a004', '包长', 16, null, null, null,null),
//        5			副导头（时间码）		48		源码
        new Params('a005', '副导头（时间码）', 48, null, v=>TD01(v),null, null),
//        6			命令类型		8			0x25
        new Params('a006', '命令类型', 8, null, null, null,null),
//        7			磁强计3.3V电压	V	12		表格	注1	0xFFF	0x000	3.6	3.0
        new Params('a007', '磁强计3.3V电压', 12, 'V', v=>F01(v, 'a007'), v=>v.toFixed(3),v=>v>=3.0 && v <= 3.6),
//        8			磁强计工作状态	无	12		表格	注2	无	无	无	无
        new Params('a008', '磁强计工作状态', 12,null, BITS(1,1,1,1,2,1,1,1,1,2),v=>`${D01[v[0]]};</br>` +
`${D02[v[1]]} ;</br>` +`${D03[v[2]]};</br>` + `${D04[v[3]]} ;</br>` +`${D05[v[4]]} ;</br>` +`${D06[v[5]]} ;</br>` +`${D07[v[6]]};</br>` + `${D08[v[7]]};</br>` + `${D09[v[8]]};</br>` + `${v[9]}`, null),
//        9			磁强计探头温度A	℃	12		表格、曲线	注3	0xFFF	0x000	无	无
        new Params('a009', '磁强计探头温度A', 12, '℃', v=>F02(v, 'a009'), v=>v.toFixed(3),null),
//        10			磁强计探头温度B	℃	12		表格、曲线	注3	0xFFF	0x000	无	无
        new Params('a010', '磁强计探头温度B', 12, '℃', v=>F02(v, 'a010'), v=>v.toFixed(3),null),
//        11			磁强计指令接收计数	无	8		表格	无	0xFF	0x00	无	无
        new Params('a011', '磁强计指令接收计数', 8, null, null,null, null),
//        12			磁强计最后指令号	无	8		表格	无	无	无	无	无
        new Params('a012', '磁强计最后指令号', 8, null, null,null, null),
//        13			磁强计伸杆脉冲计数	无	8		表格	无	0xFF	0x00	无	无
        new Params('a013', '磁强计伸杆脉冲计数', 8, null, null,null, null),
//        14			磁强计探头相位	无	16		表格	无	无	无	无	无
        new Params('a014', '磁强计探头相位', 16, null, null,null, null),
//        15			磁强计信号处理单元模拟电路温度	℃	12		表格、曲线	注4	0xFFF	0x000	-40	70
        new Params('a015', '磁强计信号处理单元模拟电路温度', 12, '℃', v=>F03(v, 'a015'), v=>v.toFixed(3),v=>v>=-40 && v <= 70),
//        16			磁强计定标线圈温度	℃	12		表格、曲线	注5	0xFFF	0x000	-130	70
        new Params('a016', '磁强计定标线圈温度', 12, '℃', v=>F04(v, 'a016'), v=>v.toFixed(3) ,v=>v>=-130 && v <= 70),
////        17 磁强计串口通讯错误计数  4 表格 0~15 15 0 无 无
//        new Params('a017', '磁强计串口通讯错误计数', 4, null, null, null),
////        18 磁强计串口通讯错误类型  4 表格 无 无 无 无 无
//        new Params('a018', '磁强计串口通讯错误类型', 4, null, null, null),
////        19 磁强计保留参数  8 表格 无 无 无 无 无
//        new Params('a019', '磁强计保留参数', 8, null, null, null),
//        17			磁强计探头工作状态	无	16		表格	无	无	无	无	无
        new Params('a017', '磁强计探头工作状态', 16, null, null, null,null),
//        18			校验和	/	8		/ 从副导头开始到源数据的字节累加和
        new Params('a018', '校验和', 8, null, null, null,null),

    ]


}
